package com.changgou.goods.service.impl;

import com.changgou.goods.dao.BrandMapper;
import com.changgou.goods.pojo.Brand;
import com.changgou.goods.service.BrandService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * Brand业务层接口实现类
 *
 * @author mario
 * @version 1.0
 * @date 2020/11/12 14:24
 */
@Service
public class BrandServiceImpl implements BrandService {

  @Autowired private BrandMapper brandMapper;

  /**
   * Brand条件+分页查询
   *
   * @param brand 查询条件
   * @param page 页码
   * @param size 页大小
   * @return 分页结果
   */
  @Override
  public PageInfo<Brand> findPage(Brand brand, int page, int size) {
    // 分页
    PageHelper.startPage(page, size);
    // 搜索条件构建
    Example example = createExample(brand);
    // 执行搜索
    return new PageInfo<Brand>(brandMapper.selectByExample(example));
  }

  /**
   * Brand分页查询
   *
   * @param page 当前页
   * @param size 页面大小
   * @return 品牌集合
   */
  @Override
  public PageInfo<Brand> findPage(int page, int size) {
    // 静态分页
    PageHelper.startPage(page, size);
    // 分页查询
    return new PageInfo<Brand>(brandMapper.selectAll());
  }

  /**
   * Brand条件查询
   *
   * @param brand 品牌信息
   * @return 品牌集合
   */
  @Override
  public List<Brand> findList(Brand brand) {
    // 构建查询条件
    Example example = createExample(brand);
    // 根据构建的条件查询数据
    return brandMapper.selectByExample(example);
  }

  /**
   * Brand构建查询对象
   *
   * @param brand 品牌信息
   * @return example
   */
  public Example createExample(Brand brand) {
    Example example = new Example(Brand.class);
    Example.Criteria criteria = example.createCriteria();
    if (brand != null) {
      // 品牌id
      if (!StringUtils.isEmpty(brand.getId())) {
        criteria.andEqualTo("id", brand.getId());
      }
      // 品牌名称
      if (!StringUtils.isEmpty(brand.getName())) {
        criteria.andLike("name", "%" + brand.getName() + "%");
      }
      // 品牌图片地址
      if (!StringUtils.isEmpty(brand.getImage())) {
        criteria.andEqualTo("image", brand.getImage());
      }
      // 品牌的首字母
      if (!StringUtils.isEmpty(brand.getLetter())) {
        criteria.andEqualTo("letter", brand.getLetter());
      }
      // 排序
      if (!StringUtils.isEmpty(brand.getSeq())) {
        criteria.andEqualTo("seq", brand.getSeq());
      }
    }
    return example;
  }

  /**
   * 删除
   *
   * @param id 主键
   */
  @Override
  public void delete(Integer id) {
    brandMapper.deleteByPrimaryKey(id);
  }

  /**
   * 修改Brand
   *
   * @param brand 品牌信息
   */
  @Override
  public void update(Brand brand) {
    brandMapper.updateByPrimaryKey(brand);
  }

  /**
   * 增加Brand
   *
   * @param brand 品牌信息
   */
  @Override
  public void add(Brand brand) {
    brandMapper.insert(brand);
  }

  /**
   * 根据ID查询Brand
   *
   * @param id 主键
   * @return 单条数据
   */
  @Override
  public Brand findById(Integer id) {
    return brandMapper.selectByPrimaryKey(id);
  }

  /**
   * 查询Brand全部数据
   *
   * @return 全部数据
   */
  @Override
  public List<Brand> findAll() {
    return brandMapper.selectAll();
  }

  @Override
  public List<Brand> findByCategory(Integer id) {
    // 两种方案:
    // 1. 自己写sql语句直接执行  推荐
    // 2. 调用通用的mapper的方法 一个个表查询

    return brandMapper.findByCategory(id);
  }
}
